package controllers;

import play.*;
import play.mvc.*;

import java.text.SimpleDateFormat;
import java.util.*;

import org.eclipse.jdt.core.dom.ThisExpression;

import models.*;

public class Application extends Controller {

    public static void index() {
        render();
    }
    public static void associado(int mes,int ano){
    	List<Date> sextas = new ArrayList();
    	List <Chale> cha = new ArrayList();
    	List <Sorteio> sorteio = new ArrayList();
    	List <Associado> associados = new ArrayList(); 
    	List <Associado> titulares = new ArrayList();
    	List <Associado> suplentes = new ArrayList();
    	int a =0;
    	
    	sextas = Application.getSextasFeiras(10,2012);
    	associados= Associado.findAll();
    	cha = Chale.findAll();
    	Collections.shuffle(associados);
    	titulares= associados.subList(0,(cha.size())*(sextas.size()));
    	
    	suplentes= associados.subList(titulares.size()-1, associados.size()-1);
   /* 	System.out.println(cha.size());
    	System.out.println(sextas.size());
    	System.out.println(titulares.size());
    	System.out.println(suplentes.size());*/
    	for(int cont=0;cont<cha.size();cont ++){
    		for(int index=0;index<sextas.size();index++){
    			Sorteio s= new Sorteio(titulares.get(a), cha.get(cont), sextas.get(index));
    			//System.out.println(sextas.get(index));
    			s.save();
    			sorteio.add(s);
    			a++;
    		}
    	}
    
    	
    	
    	
  /*  	Sorteio s = new Sorteio(a, cha.get(0) , sextas.get(0));
    	Sorteio z = new Sorteio(c,cha.get(0), sextas.get(1) );
    	Sorteio w = new Sorteio(c,cha.get(0), sextas.get(2) );
    	Sorteio x = new Sorteio(c,cha.get(0), sextas.get(3) );*/
    	
    	
    	
    	
    	
    	render(sorteio,titulares);
    }
/*    public static void associado(){
        List <Chale> cha = new ArrayList();
        List <Associado> b = new ArrayList();
        List <Associado> a = new ArrayList();
        List <Associado> c = new ArrayList();
        List<Date> sextas = new ArrayList();
        sextas = Application.getSextasFeiras(10,2012);
        b= Associado.findAll();
        cha = Chale.findAll();
        Collections.shuffle(b);
        a=b.subList(0,5);
        c=b.subList(5,10);
        Sorteio s = new Sorteio(a, cha);
        Sorteio z = new Sorteio(c ,cha);
       
        s.save();
        z.save();
       
       
       
        render(a,c,s,z);
    }
*/
    
   
    
    public static Date lastSegundasFeiras(int mes, int ano){
    	ArrayList<Date> segundas = new ArrayList<Date>();
    	
    	GregorianCalendar calendar = new GregorianCalendar();
    	calendar.set(GregorianCalendar.MONTH, mes - 1); //janeiro possui indice igual a zero
    	calendar.set(GregorianCalendar.YEAR, ano);
    	calendar.set(GregorianCalendar.DAY_OF_MONTH, 1);

    	
    	//primeira Segunda
    	int diaSemana = calendar.get(GregorianCalendar.DAY_OF_WEEK);
    	int diferenca;
		
//    	pega as segundas
    	if(diaSemana<1){
    		diferenca=2;
    	}
    	else
    		diferenca = 2 - diaSemana;

    	calendar.add(GregorianCalendar.DAY_OF_MONTH, diferenca);
    	segundas.add(calendar.getTime());
    	//sextas-feiras restantes
    	calendar.add(GregorianCalendar.DAY_OF_MONTH, 7);
    	do{
    		segundas.add(calendar.getTime());
    		calendar.add(GregorianCalendar.DAY_OF_MONTH, 7);
    	}while(calendar.get(GregorianCalendar.MONTH) == mes - 1);
    	
    	return segundas.get(segundas.size()-1);
    }
    	
    
    
    public static List<Date> getSextasFeiras(int mes, int ano){
    	ArrayList<Date> sextas = new ArrayList<Date>();
    	
    	GregorianCalendar calendar = new GregorianCalendar();
    	calendar.set(GregorianCalendar.MONTH, mes - 1); //janeiro possui indice igual a zero
    	calendar.set(GregorianCalendar.YEAR, ano);
    	calendar.set(GregorianCalendar.DAY_OF_MONTH, 1);
    	
    	//primeira sexta-feira
    	int diaSemana = calendar.get(GregorianCalendar.DAY_OF_WEEK);
    	int diferenca;
	
//    	//pega as segundas
/*    	if(diaSemana<1){
    		diferenca=2;
    	}
    	else
    		diferenca = 2 - diaSemana;*/

    	//pega as sextas
    	if(diaSemana> 6)
    		diferenca =6;
    	else
    		diferenca = 6 - diaSemana;

    	calendar.add(GregorianCalendar.DAY_OF_MONTH, diferenca);
    	sextas.add(calendar.getTime());
    	//sextas-feiras restantes
    	calendar.add(GregorianCalendar.DAY_OF_MONTH, 7);
    	do{
    		sextas.add(calendar.getTime());
    		calendar.add(GregorianCalendar.DAY_OF_MONTH, 7);
    	}while(calendar.get(GregorianCalendar.MONTH) == mes - 1);
    	
    	return sextas;
    }
    
    public static void main(String[] args) {
		try{
			SimpleDateFormat fmt = new SimpleDateFormat("dd/MM/yyyy");
			Application app = new Application();
			System.out.println(app.lastSegundasFeiras(10, 2012));
			List<Date> sextas = app.getSextasFeiras(7, 2012);
			for(Date d : sextas){
				System.out.println(d);
			}
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}
}
